當一個模型的訓練資料和測試資料,彼此之間的資料分佈有不匹配(mismatch)時,模 型的性能會出現大幅的下降。為了減少問題的影響,我們對語音特徵做平均值以及變異數正規化(Cepstral Mean and Variance Normalization, CMVN),讓資料之間的分佈更為 相似。正規化計算方式如下
where
其中, 表示一筆音檔總共有 T 個音框, 表示一個音框中第 i 維度的特徵, 和 表示第 i 維度特徵的平均值和變異數
使用 python 來實作 CMVN 正規化可以參考以下程式,epsilon 是為了避免分母為 0 的情況
data.shape[0]為資料筆數,data.shape[1] 即為特徵的維度(39)
import numpy as np
def CMVN(data):
epsilon = 1e-10
for i in range(data.shape[1]) :
mean = np.mean(data[:,i])
stddev = np.std(data[:,i])
for k in range(data.shape[0]) :
data[k,i] = (data[k,i] - mean) / max(stddev, epsilon)
return data
介紹完語音特徵與正規化前處理之後接著會說明我們的神經網路架構。